public class practice4 {
    /**
     * 代码中的类名、方法名、参数名已经指定，请勿修改，直接返回方法规定的值即可
     *
     *
     * @param lists ListNode类ArrayList
     * @return ListNode类
     */
    public ListNode mergeKLists (ArrayList<ListNode> lists) {

        // 当前的解决方式比较简单粗暴，还需要仔细在想想

        // 通过数组将所有元素存储并排序后，重新插入到一个新的链表中

        // 创建出一个新的链表
        ListNode node = new ListNode(-1);
        ListNode p = node;

        // 创建出一个标志点记录所有元素的长度来创建合适的数组
        int num = 0;

        for(ListNode n : lists) {
            // 遍历 ArrayList 中的所有链表
            while(n != null) {
                n = n.next;
                num++;
            }
        }
        // 根据记录来创建出一个合适的数组
        int[] arr = new int[num];
        int i = 0;
        // 将所有链表中的值存储到数组中
        for(ListNode n : lists) {
            while(n != null) {
                arr[i] = n.val;
                n = n.next;
                i++;
            }
        }

        // 将数据存放好后，直接进行一个排序
        Arrays.sort(arr);
        for(int j = 0; j < num; j++) {
            // 构建出一个新的 List 节点存储信息
            ListNode nodes = new ListNode(arr[j]);
            node.next = nodes;
            node = node.next;
        }

        return p.next;
        // write code here
    }
}
